package io.youngledo.usb.config;

/// 统一的超时配置类
///
/// 用于管理所有对象存储服务的超时时间设置，提供标准化的超时配置常量。
///
/// ## 使用示例
/// ```java
/// // 设置连接超时
/// clientConfig.setConnectionTimeout(TimeoutConfig.CONNECTION_TIMEOUT_MS);
///
/// // 获取秒为单位的超时时间
/// int timeoutSeconds = TimeoutConfig.getConnectionTimeoutSeconds();
/// ```
public class TimeoutConfig {

    /// **连接超时时间**（毫秒）
    ///
    /// 客户端和服务器建立TCP连接所允许的最大时间
    ///
    public static final int CONNECTION_TIMEOUT_MS = 3_000;

    /// **读取超时时间**（毫秒）
    ///
    /// 客户端从服务器读取数据（`InputStream`读取响应数据）时允许的最大时间
    ///
    public static final int READ_TIMEOUT_MS = 5_000;

    /// **写入超时时间**（毫秒）
    ///
    /// 客户端向服务器写出请求体（`OutputStream`发送数据）时允许的最大时间
    ///
    public static final int WRITE_TIMEOUT_MS = 10_000;

    /// **Socket超时时间**（毫秒）
    ///
    /// 等同于读取超时，用于兼容某些SDK的命名
    ///
    public static final int SOCKET_TIMEOUT_MS = READ_TIMEOUT_MS;

    /// 获取连接超时时间（秒）
    ///
    /// @return 连接超时时间（秒）
    ///
    public static int getConnectionTimeoutSeconds() {
        return CONNECTION_TIMEOUT_MS / 1000;
    }

    /// 获取读取超时时间（秒）
    ///
    /// @return 读取超时时间（秒）
    ///
    public static int getReadTimeoutSeconds() {
        return READ_TIMEOUT_MS / 1000;
    }

    /// 获取写入超时时间（秒）
    ///
    /// @return 写入超时时间（秒）
    ///
    public static int getWriteTimeoutSeconds() {
        return WRITE_TIMEOUT_MS / 1000;
    }

    /// 私有构造函数，防止实例化
    ///
    private TimeoutConfig() {
        throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
    }
}